Cloud9上にCDK(Go)の実行環境を作ってみた
こんにちは、soraです。
今回は、Cloud9上にCDK(Go)の実行環境を作ったことについて書いていきます。
ちなみに、CDK(TypeScript)についてはAWS workshop studioにて無料公開されているワークショップをご参照ください。 CDKやTypeScriptの初心者でも、それぞれを基礎から学べます。
・AWSのWorkShop
TypeScriptの基礎から始めるAWS CDK開発 入門
・WorkShopを実際にやってみた方の記事
プログラミング経験があまりない人にもおすすめなAWS CDKのワークショップ「TypeScriptの基礎から始めるAWS CDK開発 入門」の紹介
AWS Cloud9とは
AWS Cloud9は、AWS上に統合開発環境を簡単に作ることができ、ブラウザ上でコードの記述や実行ができるサービスです。
実態としては、EC2サーバを起動してその上に統合開発環境を作ってくれます。
特にローカル環境を汚したくない方やWindowsPCを使っていてローカルで開発環境を作るのを手間に感じる方は、利用すると便利なサービスだと思います。
AWS CDKとは
CDK(Cloud Development Kit)とは、TypeScriptやPython、Goなどのプログラミング言語を使用して、CloudFormationテンプレートを作成できるツールキットです。
やってみた
それでは、実際にCloud9上に環境を作っていきます。
Cloud9の構築
Cloud9のページから[Create environment]を押して、セットアップ画面で入力・設定変更をします。
EC2インスタンスは、t3.smallを選択します。
[Create]を押して、少し待つとセットアップが完了します。
セットアップが完了したら、Cloud9 IDEの列の[OPEN]から環境に入れます。
CDK(Go)の環境準備
Cloud9の場合、npmもaws-cliもデフォルトでインストールされています。
$ npm -v 8.19.3 $ aws --version aws-cli/1.19.112 Python/2.7.18 Linux/4.14.301-224.520.amzn2.x86_64 botocore/1.20.112
新しいディレクトリを作成して移動します。
$ mkdir test-go && cd test-go
必要なgoファイルやmodファイルを生成します。
$ cdk init --language=go
コマンド実行して、ディレクトリ内に生成されたファイルは以下です。
※treeコマンドはデフォルトではインストールされていないため、使用する場合はインストールが必要です。
$ tree . ├── cdk.json ├── go.mod ├── README.md ├── test-go.go └── test-go_test.go
ビルドに必要なモジュールを追加して、go.sumファイルに情報を記載します。
$ go mod tidy
sumファイルが生成されていることが確認できます。
$ tree . ├── cdk.json ├── go.mod ├── go.sum ├── README.md ├── test-go.go └── test-go_test.go
CDKが利用するリソース群をCloudFormationスタックとしてデプロイします。
CDKを使う場合に、環境(アカウント/リージョン)ごとに1回行う必要があります。
$ cdk bootstrap
これで実行環境は完成です。
テスト
せっかくなので実際にCDKを使ってみます。
今回は空のS3バケットを作成してみます。
以下が使用するコードです。
デフォルトで記載されているコメントは削除し、追記した箇所にはコメントを追加しています。
test-go.go
package main import ( "github.com/aws/aws-cdk-go/awscdk/v2" //S3に必要なパッケージをインポート "github.com/aws/aws-cdk-go/awscdk/v2/awss3" "github.com/aws/constructs-go/constructs/v10" //CDKで言語のマッピングをするためのパッケージをインポート "github.com/aws/jsii-runtime-go" ) type TestGoStackProps struct { awscdk.StackProps } func NewTestGoStack(scope constructs.Construct, id string, props *TestGoStackProps) awscdk.Stack { var sprops awscdk.StackProps if props != nil { sprops = props.StackProps } stack := awscdk.NewStack(scope, &id, &sprops) //S3バケットを作成 awss3.NewBucket(stack, jsii.String("GoTestBucket"), &awss3.BucketProps{}) return stack } func main() { defer jsii.Close() app := awscdk.NewApp(nil) NewTestGoStack(app, "TestGoStack", &TestGoStackProps{ awscdk.StackProps{ Env: env(), }, }) app.Synth(nil) } func env() *awscdk.Environment { return nil }
先ほどのコードからCloudFormationテンプレートを生成して内容を確認します。
$ cdk synth
deployしたときのリソースの差分を確認します。
長いため一部省略していますが、Resourcesの部分でS3バケットが生成されることが確認できます。
$ cdk diff Stack TestGoStack …… Conditions …… Resources [+] AWS::S3::Bucket GoTestBucket GoTestBucket Other Changes ……
CloudFormationテンプレートへの変換・スタックの作成を実施します。
$ cdk deploy
コマンド実行後に、CloudFormationテンプレート(TestGoStack)やS3が生成されていることが確認できます。
CDKToolKitはcdk bootstrapで生成されたもの、aws-cloud9はcloud9構築時に生成されたものです。
クリーンアップ
最後に、CloudFormationスタックの削除を実行します。
$ cdk destroy
以下のようにスタックが削除されていることがわかります。
ただし今回の場合では、テンプレートから作成したS3バケットは消えておりません。
これはRemovalPolicyがデフォルトでRetainとなっているためです。
こちらの詳細については、以下記事をご確認ください。
[AWS CDK(Cloud Development Kit)] スタック削除時にS3バケットも削除されるように設定する
最後に
今回は、Cloud9上にCDK(Go)の実行環境を作って実行するまでの流れを紹介しました。
TerraformやCDKなどのIaCは、AWSで構築を行う際に基本的に使われるため、興味がある方はぜひやってみてはいかがでしょうか。